<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

namespace Common\Api;
class CategoryApi {
	/**
	 * 获取分类信息并缓存分类
	 * @param  integer $id    分类ID
	 * @param  string  $field 要获取的字段名
	 * @return string         分类信息
	 */
	public static function get_category($id, $field = null) {
		static $list;

		/* 非法分类ID */
		if (empty($id) || !is_numeric($id)) {
			return '';
		}

		/* 读取缓存数据 */
		if (empty($list)) {
			$list = S('sys_category_list');
		}

		/* 获取分类名称 */
		if (!isset($list[$id])) {
			$cate = M('Category')->find($id);
			if (!$cate || 1 != $cate['status']) {
				//不存在分类，或分类被禁用
				return '';
			}
			$list[$id] = $cate;
			S('sys_category_list', $list); //更新缓存
		}
		return is_null($field) ? $list[$id] : $list[$id][$field];
	}

	/* 根据ID获取分类标识 */
	public static function get_category_name($id) {
		return get_category($id, 'name');
	}

	/* 根据ID获取分类名称 */
	public static function get_category_title($id) {
		return get_category($id, 'title');
	}

	/**
	 * 获取参数的所有父级分类
	 * @param int $cid 分类id
	 * @return array 参数分类和父类的信息集合
	 * @author huajie <banhuajie@163.com>
	 */
	public static function get_parent_category($cid) {
		if (empty($cid)) {
			return false;
		}
		$cates = M('Category')->where(array('status' => 1))->field('id,title,pid')->order('sort')->select();
		$child = get_category($cid); //获取参数分类的信息
		$pid = $child['pid'];
		$temp = array();
		$res[] = $child;
		while (true) {
			foreach ($cates as $key => $cate) {
				if ($cate['id'] == $pid) {
					$pid = $cate['pid'];
					array_unshift($res, $cate); //将父分类插入到数组第一个元素前
				}
			}
			if ($pid == 0) {
				break;
			}
		}
		return $res;
	}
}